package com.chilli.cosima.service.impl;

import java.util.List;

import com.chilli.cosima.action.login.Node;
import com.chilli.cosima.data.bean.TOperator;
import com.chilli.cosima.data.bean.TPower;
import com.chilli.cosima.data.dao.LoginDAO;
import com.chilli.cosima.service.LoginService;

public class LoginServiceImpl implements LoginService
{
	private LoginDAO loginDao;

	public LoginDAO getLoginDao()
	{
		return loginDao;
	}

	public void setLoginDao(LoginDAO loginDao)
	{
		this.loginDao = loginDao;
	}

	public List<TPower> findChildrenPowerByParentId(String powerid)
	{
		return loginDao.findChildrenPowerByParentId(powerid);
	}

	/**
	 * 根据传入的节点构建以此节点为根的树结构
	 * 
	 * @param node
	 * @return [参数说明]
	 * 
	 * @return Node [返回类型说明]
	 * @exception throws
	 *                [违例类型] [违例说明]
	 * @see [类、类#方法、类#成员]
	 */
	public Node buildTree(Node node)
	{
		List<Node> children = node.listNodes();
		for (int i = 0; i < children.size(); i++)
		{
			Node childNode = children.get(i);
			if (!childNode.isLeaf())
			{
				childNode = buildTree(childNode);
			}
		}
		return node;
	}

	/**
	 * 将已经构造好的树结构解析为html，直接在页面显示。
	 * 在buildTree方法中也可以直接构建html，但是buildTree构建node树结构对象可以
	 * 以后在界面用json解析，这样后台代码完全避免嵌入html和样式等，代码更清晰。
	 * 
	 * 后台构建html的好处是用户登录一次，则将构建好的html放到session中，
	 * 而且构建的html只有骨架，样式和各种属性操作都是在界面由jquery完成， 在session有效的情况下可以避免重复构建。
	 * 
	 * 具体采用何种方式更好，需要根据具体需求而定。
	 * 
	 * @param tree
	 * @return [参数说明]
	 * 
	 * @return String [返回类型说明]
	 * @exception throws
	 *                [违例类型] [违例说明]
	 * @see [类、类#方法、类#成员]
	 */
	public String parseTree2Str(Node tree)
	{
		StringBuilder sb = new StringBuilder();

		if (tree.getPower().getPowerid().equals("0"))
		{
			sb.append("<ul id=\"red\" class=\"treeview-red\">");
		} else
		{
			sb.append("<li><span>");

		}

		if (tree.isLeaf())
		{
			sb.append("<a href=\"").append(tree.getPower().getPowerurl())
					.append("\" target=\"rightMainFrame\">").append(
							tree.getPower().getPowername()).append(
							"</a></span></li>");
		} else
		{

			if (!tree.getPower().getPowerid().equals("0"))
			{

				sb.append(tree.getPower().getPowername()).append("</span><ul>");
			}

			List<Node> childrenList = tree.getChildrenList();

			for (int i = 0; i < childrenList.size(); i++)
			{
				Node childNode = childrenList.get(i);
				sb.append(parseTree2Str(childNode));
			}
			if (!tree.getPower().getPowerid().equals("0"))
			{
				sb.append("</ul></li>");
			}
		}

		if (tree.getPower().getPowerid().equals("0"))
		{
			sb.append("</ul>");
		}

		return sb.toString();
	}

	public List<String> findPowerIdListWithoutButton(TOperator operator)
	{
		return loginDao.findPowerIdListWithoutButton(operator);
	}

	public List<String> findPowerIdListWithButton(TOperator operator)
	{
		return loginDao.findPowerIdListWithButton(operator);
	}

	/**
	 * 根据用户权限生成的树
	 * 
	 * @param node
	 * @param powerList
	 * @return [参数说明]
	 * 
	 * @return Node [返回类型说明]
	 * @exception throws
	 *                [违例类型] [违例说明]
	 * @see [类、类#方法、类#成员]
	 */
	public Node buildTree(Node node, List<String> powerIdList)
	{
		List<Node> children = node.listNodes(powerIdList);
		for (int i = 0; i < children.size(); i++)
		{
			Node childNode = children.get(i);
			if (!childNode.isLeaf())
			{
				childNode = buildTree(childNode, powerIdList);
			}
		}
		return node;
	}

	public List<String> findPowerUrlListWithButton(TOperator operator)
	{
		return loginDao.findPowerUrlListWithButton(operator);
	}
}
